package cn.itcast.provider.clients;

import cn.itcast.provider.entity.User;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;

/**
 * Feign将来会帮我们发起一次http请求，去访问provider中提供的接口，这个请求应该是：
 *  GET http://localhost:8081/user/10  --> User
 * Feign需要知道的信息：
 *  - 请求方式：利用反射，获取方法上的注解：@GetMapping
 *  - 请求的IP和端口：利用反射，获取类上的注解，@FeignClient("provider")，得到服务id，去eureka拉取服务列表，然后负载均衡
 *  - 请求路径：利用反射，获取方法上的注解@GetMapping("/user/{id}")，路径就知道了：/user/{id}
 *  - 请求参数：路径中的参数从反射，拿到@PathVariable("id") Long id，参数就知道了
 *  - 返回值类型：反射拿到方法的返回值类型即可
 * @author 虎哥
 */
// 这里指定的是要调用的服务的id
@FeignClient(value = "provider", fallback = UserClientFallback.class)
public interface UserClient {

    @GetMapping("/user/{id}")
    User queryById(@PathVariable("id") Long id);
}
